import { defineStore } from "pinia";
import { reqPrimCategory, reqSecCategory, reqThirdCategory } from "@/api/product/attr";
import { ref } from 'vue';
import type { CategoryResData, CategoryObj, CateId } from "@/api/product/attr/types";

export const useCategoryStore = defineStore('categoryStore', () => {
    // 一级分类数据
    const primCateArr = ref<CategoryObj[]>([]);
    // 收集的一级分类的id
    // 设置两种类型的原因是：默认不展示，而选择时收集value值
    const primCateId = ref<CateId>('');
    // 二级分类数据
    const secCateArr = ref<CategoryObj[]>([]);
    // 收集的二级分类的id
    const secCateId = ref<CateId>('');
    // 三级分类数据
    const thirdCateArr = ref<CategoryObj[]>([]);
    // 收集的三级分类的id
    const thirdCateId = ref<CateId>('');
    // 获取一级分类数据
    const getPrimCategory = async () => {
        let result: CategoryResData = await reqPrimCategory();
        if (result?.code === 200) {
            primCateArr.value = result.data;
            return 'ok';
        }
        return Promise.reject(new Error(result?.message));
    };
    // 获取二级分类数据(根据一级分类id)
    const getSecCategory = async () => {
        let result = await reqSecCategory(primCateId.value);
        if (result?.code === 200) {
            secCateArr.value = result.data;
            return 'ok';
        }
        secCateArr.value = [];
        return Promise.reject(new Error(result?.message));
    }
    // 获取三级分类数据(根据二级分类id)
    const getThirdCategory = async () => {
        let result = await reqThirdCategory(secCateId.value);
        if (result?.code === 200) {
            thirdCateArr.value = result.data;
            return 'ok';
        }
        thirdCateArr.value = [];
        return Promise.reject(new Error(result?.message));
    }
    // 重置state数据
    const $reset = () => {
        // 一级分类数据
        primCateArr.value = [];
        // 收集的一级分类的id
        primCateId.value = '';
        // 二级分类数据
        secCateArr.value = [];
        // 收集的二级分类的id
        secCateId.value = '';
        // 三级分类数据
        thirdCateArr.value = [];
        // 收集的三级分类的id
        thirdCateId.value = '';
    }
    return {
        primCateArr,
        primCateId,
        secCateArr,
        secCateId,
        thirdCateArr,
        thirdCateId,
        getPrimCategory,
        getSecCategory,
        getThirdCategory,
        $reset
    }
})